class TestFunction {
  FunctionLearn functionLearn = FunctionLearn();

  void start() {
    print(functionLearn.num(12, 34));
    functionLearn.anonymousFunction();
  }
}

class FunctionLearn {
  ///方法的构成
  ///返回值 + 方法名 + 参数
  ///返回值类型可缺省，也可为void 或具体的类型
  /// 方法名  匿名方法不需要方法名
  /// 参数：
  int num(int val1, val2) {
    return val1 + val2;
  }

  ///私有方法
  ///通常_开头命名的方法
  ///作用域是当前文件
  _learn() {}

  ///匿名方法：
  ///大部分方法都带有名字，如 main() 或者 print();
  ///在Dart中你可以创建没有名字的方法，称之为匿名方法，有时候也被称为lambda
  ///你可以吧匿名方法赋值给一个变量，然后可以使用这个方法。
  ///匿名方法和命名方法开起来类似 - 在括号之间可以定义一些参数，使用逗号分割
  ///后面大括号中的代码为函数体：
  ///
  anonymousFunction() {
    var list = ["123", "456", "789"];

    ///下面的代码定义类一个参数为i（该参数没有指定类型）的匿名函数
    ///list 中的每个元素都会调用这个函数来打印出来，同时计算了每个元素在list中索引位置
    list.forEach((i) {
      print(list.indexOf(i).toString() + ":" + i);
    });
  }
}
